﻿using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Froggy;
using Froggy.Data;
using GEA_Controle_Processos.Data.Dados;

namespace GEA_Controle_Processos.Data.Negocio
{
    [System.ComponentModel.DataObject(true)]
    public class NegocioProduto
    {
        private readonly IRepositorioGenerico<Produto, BD_GerenciadorVendasEntities> repositorioProduto;
        private readonly IRepositorioGenerico<TipoProduto, BD_GerenciadorVendasEntities> repositorioTipoProduto;
        public NegocioProduto()
        {
            repositorioProduto = new RepositorioGenerico<Produto, BD_GerenciadorVendasEntities>("chave");
            repositorioTipoProduto = new RepositorioGenerico<TipoProduto, BD_GerenciadorVendasEntities>("chave");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public List<Produto> ObterTodos()
        {
            return repositorioProduto.ObterTodos().ToList();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public List<Produto> ObterId_Nome(int idProduto, string descricao)
        {
            if (idProduto != 0 && idProduto != -1)
                return repositorioProduto.Obter(p => p.idProduto == idProduto).ToList();
            else
            {
                if (descricao != null && descricao != "")
                    return repositorioProduto.Obter(p => p.descricao.Contains(descricao)).ToList();
                else
                    return repositorioProduto.Obter(p => p.descricao.Contains("")).ToList();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="idProduto"></param>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public Produto Obter(int idProduto)
        {
            if (idProduto != 0)
                return repositorioProduto.ObterEntidade(p => p.idProduto == idProduto);
            else
                return null;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produto"></param>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Insert)]
        public bool Inserir(Produto produto)
        {

            repositorioProduto.Inserir(produto);
            return repositorioProduto.SaveChanges() > 0;

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produto"></param>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Update)]
        public bool Update(Produto produto)
        {

            Produto p = Obter(produto.idProduto);
            produto.idProduto = p.idProduto;
            repositorioProduto.Update(produto);
            p = null;
            return repositorioProduto.SaveChanges() > 0;

        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
        public List<TipoProduto> Obter_TipoProduto()
        {
            return repositorioTipoProduto.ObterTodos().ToList();
        }
    }
}
